The invention involves a new use of an existing technology called continuations. Suppose there are two functions f and g, where f takes an argument x and returns g(x)+1, and g returns twice its argument. So, calling f(n) returns 2n+1. The two functions could be expressed in Scheme as follows:
(define (fx)
(+(gx)1)) PA1 (*x2)) PA1 return g(x)+1 PA1 return x*2. PA1 (g2x(lambda (y) (+y1)))) PA1 (c(*x2))). PA1 (+(gx)1)) PA1 (*(hx)2)) PA1 (-x3)) PA1 (g2x(lambda (y) (+y1)))) PA1 (h2x (lambda (y) (c(*y2))))) PA1 (c(-x3)))
(define (gx)
Scheme is an IEEE standard language often used to describe algorithms. Scheme is used here, instead of the more conventional Pascal-like pseudocode, because it has some additional needed abstractions. Scheme is a prefix language, so x+1 is expressed as (+x1). In more conventional pseudocode, f and g might be expressed as:
Function f(x)
Function g(x)
The function g is a subroutine. The value g returns gets sent back to a calculation in process in f. After g sends control back to f, one is added to the value g returned, and then that value is returned by f.
It is possible to transform any pair of functions like f and g so that nothing has to happen in f after g returns. This can be done by packing into another function, c, everything that is supposed to happen in f after g returns, and passing c as an additional argument to g. The additional argument, c, is called a continuation. The function g is then rewritten so that instead of returning the value it would have returned, it returns the result of passing it to the continuation. For example, the original f and g could be rewritten as:
(define (f2x)
(define (g2xc)
It is noted that, in Scheme, "(lambda (x) (+x1))" means a function that takes one argument and returns that plus one. The function f2 takes one argument, a number x. It calls g2 with two arguments: x, and a function that returns its argument plus one. The work that used to be done in f after control returned from g is now packed up in a function and sent as an additional argument to g2. The function g2 takes two arguments, a number x and a function c. It returns the result of calling c on x*2. In this case, c is a function that adds one to its argument, so g2 returns (and in turn f2 returns) 2x+1, just as f did in the previous example.
Any ordinary program can be transformed to use continuations, so that nothing ever happens in a calling function after control returns from a subroutine. The form of the program that results from this transformation is called "continuation-passing style." This technique can be applied to subroutine calls to any depth. For example, the functions:
(define (fx)
(define (gx)
(define (hx)
Can be transformed into:
(define (f2x)
(define (g2xc)
(define (h2xc)
Web pages are usually sent from one machine (e.g., a server) to another (e.g., a client). The two machines can be the same, but typically are separate machines that communicate via a network. The term "server" can mean both the physical machine that is sending web pages and the software on the machine that responds to requests for pages.
The client requests a web page from the server using a url (i.e., Universal Resource Locator). A url has three parts: the protocol by which the client wants to talk to the server, the name of the server, and a third part, referred to herein as the "request," that indicates what the client wants the server to send it. The following is an example of a url expressed in a form commonly used today: http://www.foo.com/bar.html. In this url, "bar.html" is the request. Most servers would interpret "bar.html" as a request for an html file stored on disk, and would respond by reading the file and sending it to the client. But how to respond to a request is entirely up to the server. A server could equally well choose to interpret "bar.html" as a request to generate a web page containing the current time.
A web page usually contains some amount of text plus html operators specifying how to display the page on the screen. The client software (e.g. a browser) has considerable leeway in deciding how to display the page to the user. The aspect of the display of web pages relevant to the subject application is the display of links and forms.
A link is usually a combination of text and/or an image, plus a url. Typical client software will display the text or image with an underline, an outline, or some other indication that the text is active. The user can indicate that he wants to follow that link usually by clicking on it with a mouse. The phrase "to click on a link" is used herein as a general term to mean whatever method the user uses to indicate that he wants to follow a link. When the user clicks on a link, the request in the associated url is sent to the web server mentioned in that url. Usually, the request will cause the server to send the client another web page, which will in turn contain other links, resulting in an ongoing series of requests from the client interweaved with web pages sent in reply by the server(s).
A form is like a link in that it includes places (e.g., "buttons") where the user can click to send a request to a server, but it can also include "fields", through which the user can send additional information along with the request. For example, a form field might be a menu of choices, a box in which the user can type text, or a button that the user can toggle on or off.
The term "link" is used herein to include both links and forms, along with any other element of a web page that has an associated url, and which a user can click on to send the request in the url to the server mentioned therein.